#include "timer.h"
#include "hardware.h"

extern volatile uint8_t mode;

void CriticalError(unsigned char errorcode)
{
	unsigned char ecode, i;

	mode = 1; // Alive blinkt sehr schnell
	for(;;)
	{
		ecode = errorcode;
		for (i=0; i<8; i++)
		{
			set_error_led(1);
			wait_ms(200 + (500 * (ecode & 0x01)));
			set_error_led(0);
			ecode = ecode >> 1;
			wait_ms(800);
		}
		wait_ms(3000);
	}
}

void check_loop_Hang(uint8_t place)
{
	static uint8_t old_place = 0;

	if (place != old_place)
		timer.loop_hang_timeout_100ms = 20; // 2sek.

	// ist die Zeit abgelaufen, Stoppt das System und gibt die Fehlerstelle 
	// der Entlosschleife als BlinkCode auf der ErrorLED aus
	if (timer.loop_hang_timeout_100ms == 0)
		CriticalError(place);
}

void check_Hang(uint8_t place)
{
	static uint8_t old_place = 0;

	if (place != old_place)
		timer.hang_timeout_100ms = 5; // 500ms

	// ist die Zeit abgelaufen, Stoppt das System und gibt die Fehlerstelle 
	// der Entlosschleife als BlinkCode auf der ErrorLED aus
	if (timer.hang_timeout_100ms == 0)
		CriticalError(place);
}
